package com.zzyk.main.mapper;

import com.zzyk.main.model.pojo.DeviceExtraData;
import com.zzyk.main.model.vo.DateAndString;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface DeviceExtraDataMapper {
    /**
     * delete by primary key
     *
     * @param id primaryKey
     * @return deleteCount
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * insert record to table
     *
     * @param record the record
     * @return insert count
     */
    int insert(DeviceExtraData record);

    /**
     * insert record to table selective
     *
     * @param record the record
     * @return insert count
     */
    int insertSelective(DeviceExtraData record);

    /**
     * select by primary key
     *
     * @param id primary key
     * @return object by primary key
     */
    DeviceExtraData selectByPrimaryKey(Integer id);

    /**
     * update record selective
     *
     * @param record the updated record
     * @return update count
     */
    int updateByPrimaryKeySelective(DeviceExtraData record);

    /**
     * update record
     *
     * @param record the updated record
     * @return update count
     */
    int updateByPrimaryKey(DeviceExtraData record);

    /**
     * 根据设备ID去查询设备的实时数据
     *
     * @param id
     * @return
     */
    DeviceExtraData selectByDeviceId(@Param("id") Integer id);

    /**
     * 根据设备ID去查询设备今日用电量
     *
     * @param id
     * @return
     */
    List<DateAndString> selectTodayElectricity(@Param("id") Integer id);

    /**
     * 根据ID查询设备实时功率
     *
     * @param id
     * @return
     */
    List<DateAndString> selectRealPower(@Param("id") Integer id);

    /**
     * 获取本月生产时长
     *
     * @param id
     * @param bDate
     * @param eDate
     * @return
     */
    List<DateAndString> selectProductionTime(@Param("id") Integer id, @Param("bDate") Date bDate, @Param("eDate") Date eDate);

    /**
     * 根据时间范围获取用电量
     *
     * @param id
     * @param bDate
     * @param eDate
     * @return
     */
    List<DateAndString> selectTodayElectricityByParam(@Param("id") Integer id, @Param("bDate") Date bDate, @Param("eDate") Date eDate);

    /**
     * 根据时间范围查询功率
     *
     * @param id
     * @param bDate
     * @param eDate
     * @return
     */
    List<DateAndString> selectRealPowerParam(@Param("id") Integer id, @Param("bDate") Date bDate, @Param("eDate") Date eDate);

    /**
     * 根据时间范围查询设备用电分析数据
     *
     * @param id
     * @param bDate
     * @param eDate
     * @return
     */
    List<DeviceExtraData> selectElectricityAnalysisDataByParam(@Param("id") Integer id, @Param("bDate") Date bDate, @Param("eDate") Date eDate);

    /**
     * 根据传入时间查询高峰工作时间
     *
     * @param date
     * @return
     */
    Integer selectPeakPrice(@Param("date") Date date, @Param("id") Integer id);

    /**
     * 根据传入时间查询平段工作时间
     *
     * @param date
     * @return
     */
    Integer selectLevelPrice(@Param("date") Date date, @Param("id") Integer id);

    /**
     * 根据传入时间查询低估工作时间
     *
     * @param date
     * @param id
     * @return
     */
    Integer selectValleyPrice(@Param("date") Date date, @Param("id") Integer id);

    /**
     * 获取上月高峰工作时间
     *
     * @param id
     * @return
     */
    Integer selectLastMonthPeakPrice(@Param("id") Integer id);

    /**
     * 获取上月平段工作时间
     *
     * @param id
     * @return
     */
    Integer selectLastMonthLevelPrice(@Param("id") Integer id);

    /**
     * 获取上月谷工作时间
     *
     * @param id
     * @return
     */
    Integer selectLastMonthValleyPrice(@Param("id") Integer id);

    /**
     * 本月峰
     *
     * @param id
     * @return
     */
    Integer selectThisMonthPeakPrice(@Param("id") Integer id);

    /**
     * 本月平
     *
     * @param id
     * @return
     */
    Integer selectThisMonthLevelPrice(@Param("id") Integer id);

    /**
     * 本月谷
     *
     * @param id
     * @return
     */
    Integer selectThisMonthValleyPrice(@Param("id") Integer id);

    /**
     * 获取今日生产时长
     *
     * @param id
     * @return
     */
    String selectTodayProductionTime(Integer id);

    /**
     * 报告管理下用电质量参数考核分析 按月份查询
     *
     * @param enterprise 企业ID
     * @param month      月份
     * @param deviceList
     * @return
     */
    List<DeviceExtraData> selectElectricityParameters(@Param("enterprise") Integer enterprise, @Param("month") String month, @Param("deviceList") Integer[] deviceList);
}
